package 双指针法;

import com.alibaba.fastjson.JSON;

public class No27移除元素 {

    /**
     *  O(1) 额外空间并 原地 修改输入数组。
     *  给定 nums = [3,2,2,3], val = 3,
     * 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。
     * 你不需要考虑数组中超出新长度后面的元素。
     */

    public static int removeElement(int[] nums, int val) {

        int valIndex=0;//指针
        int count=0;

        for (int i = 0; i < nums.length; i++) {


            if(nums[i]!=val){

                count++;

                if(valIndex!=i){
                    nums[valIndex]=nums[i];
                    nums[i]=val;
                    valIndex++;
                }else{
                    valIndex++;//两个++可以放到条件外面
                }

            }


        }
        return count;
    }

    public static int removeElementGaijin(int[] nums, int val) {

        int valIndex=nums.length-1;//尾巴指针
        int i=0;

        while (i<=valIndex) {
            if (nums[i] == val) {
                nums[i] = nums[valIndex];
                valIndex--;//没有i++,因为我们还要继续检查放过来的元素
            }else{
                i++;
            }
        }

        return valIndex;
    }

    public static void main(String[] args) {
        int[] arr=new int[]{3,2,2,3};
        int i = removeElementGaijin(arr, 3);
        System.out.println(i);
        System.out.println(JSON.toJSONString(arr));
    }

}
